package com.zh.work.dao.platform.agent;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zh.work.entity.SaleRate;
import com.zh.work.entity.agent.AgentInfoEntity;
import com.zh.work.entity.agent.AgentRelateEntity;
import com.zh.work.entity.agent.QrCodeAgentFee;
import com.zh.work.entity.branch.BranchInfoEntity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: 代理商信息数据交互层
 * @Author: Li.HuiNeng
 * @Create in: 2019/08/28
 * @Version: 1.0.1
 */
@Repository
public interface AgentInfoMapper extends BaseMapper<AgentInfoEntity> {

    /** 查询指定代理商上级机构费率信息 */
    List<QrCodeAgentFee> getBranchFee(@Param("branchNo")String branchNo);

    /** 查询代理商部分信息 */
    AgentInfoEntity getAgentInfoById(@Param("id") String id);

    /** 查询指定级别代理商二维码费率信息信息 */
    List<QrCodeAgentFee> getAgentQrCodeFeeByRelate(@Param("level")String level,@Param("agentNo")String agentNo);

    /** 查询指定代理商二维码费率信息 */
    List<QrCodeAgentFee> getAgentQrCodeFee(@Param("superAgent")String superAgent);

    /** 查询当前地区中代理商编号最大值 */
    String getAgentMaxId(@Param("areaCode")String areaCode);

    /** 查询机构业务编号 */
    String getBranchBizCode(@Param("branchNo")String branchNo);

    /** 查询当前地区中商户编号最大值 */
    String getMerchMaxId(@Param("merchNo")String merchNo);

    /** 查询,根据卡类型、结算类型和分销商级别获取MPOS的分销费率信息 */
    SaleRate getMPosRate(SaleRate saleRate);

    /** 查询,根据代理商级别获取上级除二维码费率之外的所有费率信息 */
    AgentInfoEntity getParentOtherFee(@Param("id")String id);

    /** 查询机构除二维码费率外其它费率信息 */
    BranchInfoEntity getBranchOtherFee(@Param("branchNo")String branchNo);

    /** 修改代理商审核状态 */
    int modAgentStatus(@Param("agentId")String agentId,@Param("remark")String remark,@Param("status")String status);

    /** 删除代理商与登录账号的关联表信息 */
    int delAgentAndUser(@Param("agentId")Long agentId);

    /** 添加代理商级别表信息 */
    int putAgentRelate(AgentRelateEntity relateEntity);

    /** 添加代理商时,新增外键表 */
    int putAgentForKeyByUser(@Param("accountId")Long accountId,@Param("agentId")Long agentId);

    /** 查询代理商费率数量 */
    Map<String,Long> getMerchantFee(@Param("agentNo")String agentNo);


}
